<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //迭代器iterator
      // 创建一个指针对象，指向当前数据结构的起始位置
      // 第一次调用对象的next方法，指针自动只想数据结构的第一个成员
      // 每次调用next方法，指针一直往后移，直到指向最后一个成员
      // 每次调用next方法，返回{value，done}
      /*需要自定义遍历数据的时候，使用迭代器*/
      const class2 = {
        name: "class18",
        stu: ["huang", "tan", "xin", "fu"],
        // 对象声明函数简写形,去掉:function
        [Symbol.iterator]() {
          //定义变量控制下标值
          let index = 0;
          return {
            //用箭头函数保留this指向
            next: () => {
              //没遍历完
              if (index < this.stu.length) {
                const result = { value: this.stu[index], done: false };
                index++;
                return result;
              } else {
                //遍历完了
                return { value: undefined, done: true };
              }
            },
          };
        },
      };
      //遍历对象
      /*
      1.对象无法使用for...of,内置没有Symbol.iterator属性，无法迭代
      */
      for (const iterator of class2) {
        console.log(iterator);
      }
    </script>
  </body>
</html>
